﻿/** 
 *Copyright(C) 2018 by #COMPANY# 
 *All rights reserved. 
 *FileName:     #SCRIPTFULLNAME# 
 *Author:       #AUTHOR# 
 *Version:      #VERSION# 
 *UnityVersion：#UNITYVERSION# 
 *Date:         #DATE# 
 *Description:    
 *History: 
 */

using System.Collections;
using System.Collections.Generic;

using UnityEngine;

// 动画管理类
public class TweenAnimationManager : MonoBehaviour {

    // 队列（先进先出）
    private Queue<List<AnimData>> animQueue = new Queue<List<AnimData>> ( );

    // 正在动画中？
    bool isTween;

    // 进行动画的数量
    int tweenAnimationCount;

    // 已经结束的动画数量
    int endAnimCount;

    //-------------------------------------------------------
    // MonoBehaviour Function
    //-------------------------------------------------------
    // 实行动画的处理
    private void Update ( ) {
        if (isTween) {
            // 已经在动画中了 暂不执行
            return;
        }

        // 如果队列中还有动画
        if (animQueue.Count > 0) {
            // 已经结束的动画数量清零
            endAnimCount = 0;
            // 开始动画
            isTween = true;
            // 删除最前面的一条(保持执行顺序)
            var queue = animQueue.Dequeue ( );
            // 动画数量
            tweenAnimationCount = queue.Count;
            foreach (var data in queue) {
                // 遍历所有拥有动画属性的元素，并添加动画
                var tween = data.targetObject.AddComponent<MoveTween> ( );
                // 执行动画（当前位置，目标位置，动画时间）
                tween.DoTween (data.targetObject.transform.position, data.targetPosition, data.duration, ( ) => {
                    // 结束的动画计数
                    endAnimCount++;
                    // 所有的动画都结束了
                    if (tweenAnimationCount == endAnimCount) {
                        // 执行下一次
                        isTween = false;
                    }
                });
            }
        }
    }

    // 添加动画
    public void AddListAnimData (List<AnimData> animData) {
        animQueue.Enqueue (animData);
    }
}
